package AgentesClassificadores;

import jade.core.behaviours.CyclicBehaviour;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.lang.acl.ACLMessage;

import java.io.File;
import java.io.IOException;

import org.ini4j.Ini;
import org.ini4j.InvalidFileFormatException;

@SuppressWarnings("serial")
public class AgenteTesteVeiculos extends jade.core.Agent {
	private Ini ini;
	private String caminhoFich = "config/classificadores/";
	private String nomeFich = "classificacoesTesteVeiculos";
	private ClassificacaoTesteVeiculos cfc;

	protected void setup() { 
		try {
			ini = new Ini(new File(caminhoFich + nomeFich + ".ini"));
		} catch (InvalidFileFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			DFAgentDescription dfd = new DFAgentDescription();
			dfd.setName( getAID() );
			ServiceDescription sd  = new ServiceDescription();
			sd.setType( "AgenteTesteVeiculos" );
			sd.setName( getLocalName() );
			dfd.addServices(sd);
			DFService.register(this, dfd );  
		}
		catch (FIPAException fe) { 
			fe.printStackTrace(); 
		}

		addBehaviour(new CyclicBehaviour(this) 
		{
			public void action() 
			{
				ACLMessage msg= receive();
				ACLMessage reply;
				if (msg!=null) {

					reply = msg.createReply();
					reply.setContent(Float.toString(getClassificacao(msg.getContent())));
					send(reply);
				}
				block(5000);
			}
		});

	}


	public float getClassificacao(String nomeFornecedorModelo) {

		int consumoMedio = Integer.parseInt(ini.get(nomeFornecedorModelo, "consumoMedio"));
		int poluicao = Integer.parseInt(ini.get(nomeFornecedorModelo, "poluicao"));
		int desempenho = Integer.parseInt(ini.get(nomeFornecedorModelo, "desempenho"));
		int conforto = Integer.parseInt(ini.get(nomeFornecedorModelo, "conforto"));
		int tecnologia = Integer.parseInt(ini.get(nomeFornecedorModelo, "tecnologia"));
		int design = Integer.parseInt(ini.get(nomeFornecedorModelo, "design"));
		int custoBeneficio = Integer.parseInt(ini.get(nomeFornecedorModelo, "custoBeneficio"));


		cfc = new ClassificacaoTesteVeiculos(consumoMedio, poluicao, desempenho, conforto, tecnologia, design, custoBeneficio);

		return cfc.getClassificacao();
	}
}
